package com.qinglei.recoup.system.service;

import com.qinglei.recoup.common.domain.CommonRes;
import com.qinglei.recoup.common.exception.RedisConnectException;
import com.qinglei.recoup.system.domain.SystemConfig;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qinglei.recoup.system.pojo.AbnormalTimeVO;
import com.qinglei.recoup.system.pojo.TimePeriodParam;
import com.qinglei.recoup.system.pojo.TourTimeVO;

import java.util.List;

/**
 * @author syp
 */
public interface SystemConfigService extends IService<SystemConfig> {
    /**
     * 默认监测时段
     */
    int TYPE_DEF_MONITOR_TIME = 1;
    /**
     * 巡查时段
     */
    int TYPE_TOUR_TIME = 2;
    /**
     * 离床到异常时间阈值
     */
    int TYPE_OUT_BED_TIMEOUT = 3;
    /**
     * 护工异常处理时间阈值
     */
    int TYPE_TAKE_EVENT_TIMEOUT = 4;

    /**
     * 查询离床到异常时间阈值
     * @return
     */
    CommonRes getAbnormalTime();

    /**
     * 修改离床到异常时间阈值
     * @param time
     * @return
     */
    CommonRes uptAbnormalTime(AbnormalTimeVO abnormalTimeVO) throws RedisConnectException;

    /**
     * 修改护工异常处理时间阈值
     * @param abnormalTimeVO
     * @return
     */
    CommonRes uptNurseAbnormalTime(AbnormalTimeVO abnormalTimeVO) throws RedisConnectException;

    /**
     * 查询护工异常处理时间阈值
     * @return
     */
    CommonRes getNurseAbnormalTime();
    /**
     * 获取离床事件超时阈值（单位秒）
     * @return
     */
//    int getOutBedTimeout();

    /**
     * 获取接单事件超时阈值（单位秒）
     * @return
     */
//    int getTakeEventTimeout();

    /**
     * 获取巡视时间列表
     * @return
     */
    List<TourTimeVO> getTourTimeList();

    /**
     * 查询要录入的时间段是否与已存在的时间段有重叠时间段
     * @param monitorTimeQO
     * @param type 参数类型，1-默认监测时段 2-巡查时段
     * @return
     */
    boolean overlap(TimePeriodParam monitorTimeQO, Integer type);

    /**
     * 载入床位监控时段到redis
     * @throws RedisConnectException
     */
    void loadTakeEventTimeoutRedisCache() throws RedisConnectException;

    /**
     * 设置护工接单超时缓存
     * @param tenantId
     * @throws RedisConnectException
     */
    void setTakeEventTimeoutRedisCache(Integer tenantId, Integer time) throws RedisConnectException;

    /**
     * 获取护工接单超时
     * @param tenantId
     * @return
     */
    Integer getTakeEventTimeoutRedisCache(Integer tenantId);

    /**
     * 获取默认离床时间阀值
     * @return
     */
    String getDefaultOutBedTimeout();

    /**
     * 获取默认监控时间端
     * @return
     */
    List<TimePeriodParam> getDefaultMonitorTime();
}
